From 169d9464994c3b3a8084780bd080554aa52c4475 Mon Sep 17 00:00:00 2001 From: robertlipe Date: Mon, 14 May 2012 13:48:18 +0000 Subject: [PATCH] Preserve track segement boundaries when reversing a track. --- .../reference/track/trk_reverse_test-fwd.gpx | 67 +++++++++++++++++++ .../reference/track/trk_reverse_test-rev.gpx | 67 +++++++++++++++++++ gpsbabel/reverse_route.c | 21 +++++- gpsbabel/testo.d/track.test | 4 ++ 4 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 gpsbabel/reference/track/trk_reverse_test-fwd.gpx create mode 100644 gpsbabel/reference/track/trk_reverse_test-rev.gpx diff --git a/gpsbabel/reference/track/trk_reverse_test-fwd.gpx b/gpsbabel/reference/track/trk_reverse_test-fwd.gpx new file mode 100644 index 000000000..0be5ecb1b --- /dev/null +++ b/gpsbabel/reference/track/trk_reverse_test-fwd.gpx @@ -0,0 +1,67 @@ + + + + + + track one + + + + + + + + + + + + + + + + + + + track two + + + + + + + + + + + + + + + + + + + track three + + + + + + + + + + + + + + + + + + diff --git a/gpsbabel/reference/track/trk_reverse_test-rev.gpx b/gpsbabel/reference/track/trk_reverse_test-rev.gpx new file mode 100644 index 000000000..2517f809f --- /dev/null +++ b/gpsbabel/reference/track/trk_reverse_test-rev.gpx @@ -0,0 +1,67 @@ + + + + + + track one + + + + + + + + + + + + + + + + + + + track two + + + + + + + + + + + + + + + + + + + track three + + + + + + + + + + + + + + + + + + diff --git a/gpsbabel/reverse_route.c b/gpsbabel/reverse_route.c index 18bbe770a..b98cac1b3 100644 --- a/gpsbabel/reverse_route.c +++ b/gpsbabel/reverse_route.c @@ -25,21 +25,40 @@ #define MYNAME "Route reversal filter" +static int prev_new_trkseg; + static arglist_t reverse_route_args[] = { ARG_TERMINATOR }; +/* + * reverse_route_wpt fixes up the waypoint flag new_trkseg + */ +static void reverse_route_wpt(const waypoint* waypointp) +{ + + /* Cast away const-ness */ + waypoint* wpp = (waypoint *) waypointp; + + int curr_new_trkseg; + + curr_new_trkseg = waypointp->wpt_flags.new_trkseg; + wpp->wpt_flags.new_trkseg = prev_new_trkseg; + prev_new_trkseg = curr_new_trkseg; +} + void reverse_route_head(const route_head *rte) { route_reverse(rte); + prev_new_trkseg = 1; } void reverse_route_process(void) { - track_disp_all(reverse_route_head, NULL, NULL); + track_disp_all(reverse_route_head, NULL, reverse_route_wpt); route_disp_all(reverse_route_head, NULL, NULL); } diff --git a/gpsbabel/testo.d/track.test b/gpsbabel/testo.d/track.test index 65bdf11ba..379cf4b8f 100644 --- a/gpsbabel/testo.d/track.test +++ b/gpsbabel/testo.d/track.test @@ -19,3 +19,7 @@ gpsbabel -t -i unicsv -f ${REFERENCE}/track/trackfilter_faketime.txt -x track,fa compare ${REFERENCE}/track/trackfilter_faketime.gpx ${TMPDIR}/ft.gpx gpsbabel -t -i unicsv -f ${REFERENCE}/track/trackfilter_faketime.txt -x track,faketime=f20100506060000+5 -o gpx -F ${TMPDIR}/ftf.gpx compare ${REFERENCE}/track/trackfilter_faketime_forced.gpx ${TMPDIR}/ftf.gpx + +# reverse the track +gpsbabel -t -i gpx -f ${REFERENCE}/track/trk_reverse_test-fwd.gpx -x reverse -o gpx -F ${TMPDIR}/trk_reverse_test-rev.gpx +compare ${REFERENCE}/track/trk_reverse_test-rev.gpx ${TMPDIR}/trk_reverse_test-rev.gpx -- 2.30.2